Return to Main ContentsShowTable of Contents
Starting, Stopping, Resetting Expeditor integrator
Start Expeditor integrator runtime
The Expeditor integrator can be started by:
- Locate the XPDintegStart.bat under Windows and XPDintegStart.sh under Linux in the <XPDINTEG_HOME> directory (see chapter 2.5 Expeditor integrator file and directory structure) and execute it. Make sure the user account under which the XPDintegStart.bat/sh is executed has sufficient access rights to the given local file system folders. dd
- If the Expeditor integrator was installed as a service:
- Windows: Start the Windows Service from the Windows Management Console
- Linux: Run the Linux service from a root console
- Restart the Expeditor integrator runtime server (not recommended)
Note: If problems with the messaging back-end connection are experienced, the connection and queues can be re-set by running the resetscript/XPDintegReset.bat/sh. This deletes all messages from the local queues, the current internal OSGi Config Store, all log and trace files (including the transaction log). Please, use this command with care!
Important: If start-up problems are encountered a StartUpProblems.log file is created under <XPDINTEG_HOME>/workspace/logs.
Stop Expeditor integrator runtime
The Expeditor integrator has the following options for being stopped (e.g. after configuration changes which require a restart):
- through the Expeditor integrator console: Locate the console window (under Windows named <XPDINTEG_HOME>/.../java.exe) that was started by the XPDintegStart.bat/sh in the <XPDINTEG_HOME> directory (see chapter 2.5 Expeditor integrator file and directory structure), enter close (or exit) and press Enter:
- by toggling the service: If the Expeditor integrator was installed as a …
- Windows Service, locate the service in the Windows Service panel and stop or re-start IBM Lotus Expeditor integrator from there.
- Linux Service, open a root console and run the command: service XPDintegSvc start|stop|restart
- through the PlatformRestart control message: Control Message with MessagePurpose=PlatformRestart can be sent to the CtrlQ. If this operation is enabled and allowed (credentials), the Expeditor integrator runtime can be re-started or stopped (refer to chapter 5.11.1 Securing Operations for securing flows).
Note: Stopping the runtime shuts the Administrator out from accessing the Expeditor integrator platform. After stopping the runtime, Expeditor integrator can only be started manually (or through the Windows Service if installed).
The IBM Lotus Expeditor integrator Windows Service can also be managed from a console window like the Linux service (option 2). Under Linux, copy the XPDintegSvc file to the /etc/init.d directory. For Windows, locate the <XPDINTEG_HOME>/service/XPDintegSvc(.exe) file which understands commands and optional parameters:
- Commands to start, restart and stop Expeditor integrator service (without console window):
- Windows:
XPDintegSvc.exe start
XPDintegSvc.exe restart
XPDintegSvc.exe stop
- Linux:
service XPDintegSvc start
service XPDintegSvc restart
service XPDintegSvc stop
- Optional parameter to start Expeditor integrator service in a console window and with running reset before start-up:
Windows: XPDintegSvc.exe start –reset –console
Linux: service XPDintegSvc start –reset -console
- with console, but without running reset before start-up:
XPDintegSvc.exe start –console
Note: Console logging needs to be switched on if log messages should be displayed (see chapter 5.7 Log Messages).
- Re-start Expeditor integrator service in a console window with/without running reset before start-up:
XPDintegSvc.exe restart –reset –console
XPDintegSvc.exe restart –console
Note: If a manual service start is invoked using the XPDintegSvc.exe program under Windows, the provided start-up parameters -reset and/or -console are persisted. This means that during subsequent re-starts of Expeditor integrator service (e.g. from the Windows Services panel), the previous parameter settings are re-used. If these parameters settings are to be changed, the XPDintegSc.exe must be run again with the desired parameters. This also applies for ACS Flows which use the XPDintegSvc.exe to re-start the Expeditor integrator platform. The previoius parameter settings are re-used unless new ones are provided.
Expeditor integrator logging to the OSGi Console
If Expeditor integrator is started in –console mode, log messages can be displayed (see chapter 5.7 Log Messages). This is disabled by default, but can be switched back-on
- permanently (also available after re-start):
by editing the following line in <XPDINTEG_HOME>/rcp/eclipse/features/com.ibm.rcp.integrator.feature_<version>.<build>/handler.properties
-Dcom.ibm.rcp.integrator.showflowstatus=true
- temporarily (not set anymore after platform reset):
by editing the following line in <XPDINTEG_HOME>/workspace/.config/rcpinstall.properties
-Dcom.ibm.rcp.integrator.showflowstatus=true
Note: Changes to handler.properties and rcpinstall.properties require a platform re-start. Changes to the handler.properties file require resetting and re-starting the Expeditor integrator platform (stop Expeditor integrator and run resetscript/XPDintegReset.bat before starting it again). Caution: All messages in local queues will be delete during Reset!
The installation and un-installation of Expeditor integrator is further explained in chapter 2.3 Installation of Expeditor integrator and 2.4 Uninstalling of Expeditor integrator.
Expeditor integrator file based logging
Flow status messages can also be logged file based. This is disabled by default, but can be switched back-on
a) permanently (also available after re-start):
by editing the following line in
/rcp/eclipse/features/com.ibm.rcp.integrator.feature_./handler.properties
-Dcom.ibm.rcp.integrator.logflowstatus=true
a) temporarily (not set anymore after platform reset):
by editing the following line in
/workspace/.config/rcpinstall.properties
-Dcom.ibm.rcp.integrator.logflowstatus=true
Note: Changes to handler.properties and rcpinstall.properties require a platform re-start. Changes to the handler.properties file require resetting and re-starting the Expeditor integrator platform (stop Expeditor integrator and run resetscript/XPDintegReset.bat before starting it again). Caution: All messages in local queues will be delete during Reset!
The flow status log files can be found in folder /workspace/logs. The current log file is XPDinteg_FlowStatus-0.log. The log file is rotating when exceeding a size of 4 MB per default. The default rotation log file count is 10. This means that the oldest file is overwritten when there are 10 log files located in the log directory. Both of these values can be configured by adding the following two lines to the handler.properties or the rcpinstall.properties file:
-Dcom.ibm.rcp.integrator.logflowstatusfilesize=<MAX_LOG_FILE_SIZE_IN_BYTE>
-Dcom.ibm.rcp.integrator.logflowstatusmaxfilenumber=<MAX_LOG_FILE_COUNT>
Expeditor integrator platform Reset
Expeditor integrator platform saves its configuration data in the RCP workspace folder (location stored in variable rcpdata; configured during installation; see chapter 2.3 Installation of Expeditor integrator and). The workspace folder also contains log data and manually installed OSGi bundles and Eclipse features (if not installed with property allocation-affinity set to the location of an existing Expeditor integrator feature).
The IBM micro broker (Expeditor integrator messaging service) and the transaction service store their data under the persistent folder.
In case of configuration errors or configuration changes (of messaging service/micro broker) and problems with micro broker, the Expeditor integrator platform can be reset by executing this script:
resetscript/XPDintegReset.bat/sh
The platform reset script whipes all content of the following directories:
<XPDINTEG_HOME>/
workspace
<XPDINTEG_HOME>/persistent
When Expeditor integrator is started up again, the content of the XPDinteg.xml configuration file is re-applied.
Note: If problems with the messaging back-end connection are experienced, the connection and queues can be re-set by performing this platform Reset. This deletes all messages from the local queues, the current internal OSGi Config Store, all log and trace files (including the transaction log). Please, use this command with care!
Remote Platform Restart
The PlatformRestart control message can be used to trigger a restart of the Expeditor integrator (through CtrlQ). A complete platform stop could also be initiated.
This function must be used very carefully.
The ACS Activity XPDINTEG_PLATFORM_RESTART is able to execute scripts and therefore, can be globally disabled. The configuration parameter EnableScriptExecution is available for this in the XPDinteg.xml file. The triggered PlatformRestart Flow can be further secured by checking the provided credentials in the JMS Custom header property Credentials of the PlatformRestart control message (see chapter 5.11.1 Securing Operations below).
Please, refer to the Using the IBM Expeditor integrator platform for further details (see Ref_2).
Change Expeditor integrator Configuration
The Expeditor integrator is based on the standard OSGi Configuration Admin implementation. All application configuration data is stored in the local configuration stores of the OSGi application bundles. The OSGi Configuration Admin enables remote configuration management using the OMA/DM standard protocol (see www.openmobilealliance.org).
Note: It is highly recommended to use a central configuration management tool that maintains the configuration levels of the different stores and enables the Administrator to update and remotely manage the Expeditor integrator configuration directly through the standardized OSGi Configuration Admin.
IBM has two server components in its portfolio which can be used for remote configuration updates:
- IBM Lotus Expeditor Server (Expeditor Client Manager)
- IBM WebSphere Premises Server
The IBM Lotus Expeditor Server also allows for remote management of the Eclipse RCP features and plug-ins. Please, note that the current Expeditor integrator use case configuration is based on OSGi Configuration Admin rather then Eclipse Preferences Service. Direct configuration through the Preferences Service is not possible. But, the Expeditor Server can be used to manage Expeditor integrator’s configuration through updating the XPDinteg.xml configuration file (see below).
The IBM WebSphere Premises Server was initially developed for remote management of the RFID Reader concentrators at the remote location (Edge Devices or Data Capture devices). Since the Data Capture devices were built on the same technology stack as Expeditor integrator and also use the OSGi Configuration Admin as configuration store, the Premises Server can also manage Expeditor integrator’s configuration. For this, Premises Server licenses and two further Data Capture bundles are required (Please, contact your IBM Representative for further information about the WebSphere Premises option.).
However, for small environments where a Device Management Server is not available, the additionally developed Custom Config Service allows for using a local configuration file to update the Expeditor integrator configuration (config/XPDinteg.xml). Details about available configuration parameters and their possible values are given in the configuration section (see Default Queue names section 3).
Note: It is important to understand that the configuration through the XPDinteg.xml file and the Custom Config Service approach is for environments without a Device Management Server (DMS) only. A mix of both approaches is NOT recommended since configuration changes applied by the DMS are not reflected in the XPDinteg.xml file and will be overwritten as soon as the XPDinteg.xml file is changed.
The XPDinteg.xml file can be changed through any of the following methods:
- Option_1: locally in the Expeditor integrator installation folder (on the remote server),
- Option_2: remotely through Expeditor integrator ConfigUpdate message
- Option_3: through updating the XPDinteg.xml via file transfer (e.g. by using the Expeditor Server or software distribution tools).
Option 1 Manually updating the XPDinteg xml file on the remote server
In this case, the XPDinteg.xml file of the Expeditor integrator on a distinct remote server (e.g. the retail store server) is manually edited and changed by an Administrator. This will be mostly the case during development and test periods or during problem determination.
The update mechanism exploits the already existing features:
- The changed XPDinteg.xml file is simply copied into the <XPDINTEG_HOME>/config/new subfolder. This subfolder is monitored by a specific Resource Adapter that is configured by default:
Listing 40: LocalFileSystem Resource Adapter configuration for manual configuration update
<adapter type="XPDINTEG_FILE_SYSTEM_ADAPTER" name="UC210AdapterForConfigUpdate1">
<!-- sync mode -->
<polling>
<interval>60000</interval>
<meta-data>ASCII-config/new/XPDinteg.xml</meta-data>
<topic>com/ibm/integrator/flowtriggerevent/ConfigUpdate/LocalFileSystem/ConfigurationUpdateFile/LocalFileSystemAdapter</topic>
</polling>
<configuration>
<param name="ResourceType" value="LocalFileSystemMonitorForConfigUpdate"/>
<param name="TransferConfirmationMode" value="DELETE"/>
<param name="DestinationName" value="config/new/XPDinteg.xml"/>
</configuration>
</adapter>
- As soon as the new XPDinteg.xml file is recognized by this adapter, the
com/ibm/integrator/flowtriggerevent/ConfigUpdate/LocalFileSystem/ConfigurationUpdateFile/LocalFileSystemAdapter event is fired that triggers the manual update default flow:
Default_ConfigUpdateManual.flow
- This flow overwrites the existing config/XPDinteg.xml file with the new one in config/new directory. It also creates the updated system configuration file under config/system.
- The new XPDinteg.xml XML structure is validated by the LocalConfigUpdate_TransformAndValidate Activity.
- Finally, the LocalConfigUpdate_ConfigStoreUpdate Activity applies the configuration changes to the OSGi Configuration Admin store.
Note: Since the ConfigUpdateManual.flow runs in transactional context, the configuration update will be rolled back in case of errors.
Option 2 Replacing the XPDinteg xml file with a new file provided through an update message
This option is for remote configuration management using an existing back-end messaging system. The Expeditor integrator ConfigUpdate message is a FileTransfer message that carries
- a new (updated) XPDinteg.xml file or
- a specific Expeditor integrator XML structure which contains the configured parameters as parameter-value-pairs of the XPDintegConfig.xml file (see XPDINTEG_CONFIG_XML structure in Listing 41).
The JMS Custom Header property ResourceCmd is used to differentiate between option a) and b).
For updating the whole XPDinteg.xml (a):
ResourceCmd=FILE;[Command:{restart|stop};Param:console,reset]
Message payload contains the new XPDinteg.xml file
The new XPDinteg.xml file is detached to the <XPDINTEG_HOME>/config folder and overwrites the currently active configuration file. The Application Control Service (ACS) Update Flow (Default_ConfigUpdate.flow) is started to validate the new configuration XML structure and also create the new system configuration file (under /config/system).
And for the list of configuration parameters which need to be updated (b):
ResourceCmd =ParamList;[Command:{restart|stop};Param:console,reset]
Message Payload contains the partial properties of XPDintegConfig.xml file (see XPDINTEG_CONFIG_XML structure in Listing 41).
These parameters/values are used to update the specific attributes of the integrator bundles using also the Default_ConfigUpdate flow. Listing 41 shows a message body example for changing the maintenance mode of the custom log service using option b):
Listing 41: The XPDINTEG_CONFIG_XML structure is used for updating single Expeditor integrator properties through the ConfigUpdate message.
<?xml version="1.0" encoding="utf-8"?>
<configurations>
<configuration pid="com.ibm.rcp.integrator.customeventservice">
<properties>
<property name="MaintenanceMode" value="ON"/>
</properties>
</configuration>
</configurations>
...
For both options, the Expeditor integrator bundle configuration in OSGi Configuration Admin is updated with the properties in the new XPDinteg.xml file or the provided parameter list.
The Expeditor integrator ConfigUpdate message requires the following JMS Custom Header parameters.
Table 36: ConfigUpdate message definition
MessagePurpose
|
TransportType
|
ResourceType
|
Required custom header parameters and values / Comment
|
ConfigUpdate
|
-
|
ConfigurationUpdateFile
|
- ResourceType is set to ConfigurationUpdateFile
- MessageId, TransactionId, LocationId, MessageSrcId, HeaderVersion
- ResourceCmd= FILE|ParamList;[Command:{restart|stop};Param:console,reset]
|
- The DestinationPath and -Name parameters contain the target path in the local file system where the configuration file in the payload is detached to and applied to the OSGi Configuration Admin store.
- MessageId, TransactionId, LocationId, MessageSrcId and HeaderVersion must be provided so that the log message can be created appropriately.
The JMS Adapter (Resource Adapter) recognizes a new message in the CtrlQ and fires the corresponding event with this topic:
com/ibm/integrator/flowtriggerevent/ConfigUpdate/LocalFileSystem/ConfigurationUpdateFile/JmsAdapter
This event is received by the ACS which kicks off the configured default configuration update flow which provides transactional security for the configuration update as well:
Flow file name: Default_ConfigUpdate.flow
The triggered default flow will contain
- ConfigUpdate_TransformAndValidate Activity which validates the XML schema of the config file
- ConfigUpdate_FileWriteToFileSystem Activities for writing the new XPDinteg.xml and XPDintegConfig.xml
- ConfigUpdate_ConfigStoreUpdate Activity which finally updates the OSGi Config Admin store.
- PlatformRestart_PlatformRestart which re-starts the Expeditor integrator platform if it was indicated in the ResourceCmd header of the ConfigUpdate message.
Notes:
- There is no corresponding reply message. Log and Business Event (transaction status information) messages are available for appropriate status information.
- The ConfigUpdate Flow can be further secured by checking the provided credentials in the JMS Custom header property Credentials of the ConfigUpdate control message (see chapter 5.11.1 Securing Operations).
Please, refer to the Using the IBM Expeditor integrator platform for further details of how ConfigUpdate messages can be created and sent (see Ref_2).
Option 3 Replacing the XPDinteg xml file with a new file provided through remote file transfer facility
This option is the same as described in chapter 5.3.1 Option 1 Manually updating the XPDinteg xml file on the remote server. The difference is that the XPDinteg.xml file is not manually copied to the <XPDINTEG_HOME>/config/new directory; it is placed there through a remote management process. This remote file copy job can be achieved through different system. Examples would be simple FTP file transfer, Expeditor Server or software distribution tools.
As soon as the configuration update LocalFileSystem adapter recognizes a new file in the config/new directory, the LocalConfigUpdate.flow is started for processing the new configuration file.
Remote Configuration Management with IBM WebSphere Premises Server
The Expeditor integrator application can also be managed by the IBM WebSphere Premises Server. Therefore certain extra configuration parameters need to be given. There are two options to connect the Expeditor integrator to the WebSphere Premises server:
- connect directly to the MQ
- connect to the Microbroker running inside the DTS component of the Premises server
The Premises web interface is used to create and send new configurations to the Expeditor integrator. This creates a message that is put to the EDGE.OUT.Q (QM: IBM.RFID.QM). This message is forwared automatically by the DTS component to the corresponding Expeditor integrator instance according the EdgeId. (Scenario 2). If the DTS component is disabled (it’s a simple Windows service), the message then stays on the EDGE.OUT.Q and can be picked up from there by the Expeditor integrator. (Scenario 1)

Figure 12: Reload Config Scenario with the Premises Server
The WebSphere Premises server update scenario contains the following steps:
- The Administrator changes in parameters the configuration for a certain remote Expeditor integrator instance using the Premises Server user interface
- The Administrator triggers a configuration reload for this Expeditor integrator instance
- The Premises Server sends a notification message to the Expeditor integrator
- The Expeditor integrator receives the notification and triggers the Data Capture bundles
- The EdgeConfigAgent wrapper component is reacting on the message and triggers the EdgeConfigAgent by using its public API
- The Data Capture bundle retrieves the new configuration from the Premises server over HTTP
Configuration data for the EdgeConfigAgent
The following confuration data need to be provided:
Listing 42: CustomConfigService contains a section for the EdgeConfigAgent parameters
<custom-config-service>
…
<deployment-mode value="PREMISES">
<premises-deployment>
<param name="com.ibm.rfid.edge.config.autostart" value="true"/>
<param name="com.ibm.rfid.edge.config.bootstrap" value="true"/>
<param name="com.ibm.rfid.edge.config.bootstrap.overrides" value="false"/>
<param name="com.ibm.rfid.edge.config.interval" value="10000"/>
<url>
<property>com.ibm.rfid.edge.config.url</property>
<value>http://nickel.isicc.de.ibm.com:9080/ibmrfidadmin/premises.sl?action=getconfig&edge=<edge_id>&version=6.1</value>
</url>
</premises-deployment>
</deployment-mode>
...
</custom-config-service>
These parameters are part of the Custom Config Service section. The CCS takes these parameters and sets them as System properties. The EdgeConfigAgent relies on the system properties.
Configuration data to connect to the MQ running on the Premises Server
The following configuration data need to be provided in the messaging section:
- Settings for the new connection factory
- Settings for the Remote Queue on the Premises Server
- Settings for the SyncQ and DeadletterQ on the Premises Server
- Settings for the local Premises Config Queue
- Settings for the bridge
Table 37: Settings for the connection factory
<administered-objects>
…
<!-- connection factory for the MQ running on the Premises Server -->
<connection-factory name="ConnectionFactory2" type="MQ" jndiKey="jms/XPDinteg-PremisesConnectionFactory">
<params>
<param name="hostname" value="nickel.isicc.de.ibm.com"/>
<param name="port" value="1415"/>
<param name="channel" value="SYSTEM.DEF.SVRCONN"/>
<param name="queue-manager" value="IBM.RFID.QM"/>
<param name="clientid"value C00100"/>
</params>
</connection-factory>
Table 38: Settings for the SyncQ, DeadletterQ and the RemoteQ for the ConfigUpdate messages
<administered-objects>
….
<!-- Queue definitions for the Premises Server -->
<queue purpose="PremisesServerSyncQ" type="MQ" jndiKey="jms/ XPDinteg_PremisesSyncQueue">
<params>
<param name="queue-name" value="SYSTEM.CHANNEL.SYNCQ"/>
</params>
</queue>
<queue purpose="PremisesServerDeadletterQ" type="MQ" jndiKey="jms/ XPDinteg_PremisesDeadletterQueue">
<params>
<param name="queue-name" value="SYSTEM.DEAD.LETTER.QUEUE"/>
</params>
</queue>
<queue purpose="PremisesConfigQ" type="MQ" jndiKey="jms/ XPDinteg_PremisesConfigQ">
<params>
<param name="queue-name" value="EDGE.OUT.Q"/>
</params>
</queue>
<!-- END Queue definitions for the Premises Server -->
….
</administered-objects>
Table 39: Settings for the local PremisesConfigUpdateQ
<queues>
…
<!-- definition for the local PremisesConfigQ -->
<queue purpose="LocalPremisesConfigQueue">
<queue-name>XPDinteg_LocalPremisesConfigQueue</queue-name>
<jndi-key>jms/XPDinteg_LocalPremisesConfigQueue</jndi-key>
</queue>
…
</queues>
Table 40: Settings for the Bridge to the Premises MQ Server
<pipes>
….
<!-- Pipe definition for the Premises connection -->
<pipe name="Premises Pipe">
<jndi-connection connection-factory-key="jms/XPDinteg-PremisesConnectionFactory" sync-queue-key="jms/XPDinteg_PremisesSyncQueue" dead-letter-queue-key="jms/XPDinteg_PremisesDeadletterQueue"/>
<flow name="PremisesConfigFlow" direction="INBOUND">
<!-- The source and target types map onto the destination definitions in the bridge. -->
<source name="mqQ" type="JNDI">
<value>jms/MQ_PremisesConfigQ</value>
</source>
<target name="ubQ" type="QUEUE" value="XPDinteg_LocalPremisesConfigQueue">
</target>
<jms-selector>C00100</jms-selector>
</flow>
</pipe>
…
</pipes>
Configuration data to connect to the Microbroker running on the Premises Server
The following configuration data need to be provided in the messaging section:
- Settings for the new connection factory
- Settings for the topic received from the Microbroker
- Settings for the local Premises Config Queue
- Settings for the bridge
Table 41: Settings for the connection factory
<administered-objects>
…
<!-- connection factory for the MQ running on the Premises Server -->
<connection-factory name="ConnectionFactory2" type="MQTTJMS" jndiKey="jms/XPDinteg-PremisesConnectionFactory">
<params>
<param name="hostname" value="nickel.isicc.de.ibm.com"/>
<param name="port" value="1883"/>
</params>
</connection-factory>
…
</administered-objects>
Table 42: Settings for the topic for the ConfigUpdate messages
<administered-objects>
….
<topic purpose="PremisesReloadTopic" type="MQTTJMS" jndiKey="jms/ premisesDTSTopic">
<params>
<param name="topic-name" value="reload/C999"/>
</params>
</topic>
….
</administered-objects>
Table 43: Settings for the local PremisesConfigUpdateQ
<queues>
…
<!-- queues needed for the bridge in case of connecting to the DTS of the Premises Server-->
<queue purpose="LocalPremisesSyncQueue">
<queue-name>XPDinteg_PremisesSyncQueue</queue-name>
<jndi-key>jms/XPDinteg_PremisesSyncQueue</jndi-key>
</queue>
<queue purpose="LocalPremisesDeadletterQueue">
<queue-name>XPDinteg_PremisesDeadletterQueue</queue-name>
<jndi-key>jms/XPDinteg_PremisesDeadletterQueue</jndi-key>
</queue>
<!-- definition for the local PremisesConfigQ -->
<queue purpose="LocalPremisesConfigQueue">
<queue-name>XPDinteg_LocalPremisesConfigQueue</queue-name>
<jndi-key>jms/XPDinteg_LocalPremisesConfigQueue</jndi-key>
</queue>
…
</queues>
Table 44: Settings for the Bridge to the Premises MQ Server
<pipes>
….
<!-- Pipe definition for the Premises connection -->
<pipe name="Premises Pipe">
<jndi-connection connection-factory-key="jms/XPDinteg-PremisesConnectionFactory" sync-queue-key="jms/XPDinteg_PremisesSyncQueue" dead-letter-queue-key="jms/XPDinteg_PremisesDeadletterQueue"/>
<flow name="PremisesConfigFlow" direction="INBOUND">
<!-- The source and target types map onto the destination definitions in the bridge. -->
<source name="ubTopic" type="JNDI">
<value>jms/premisesDTSTopic</value>
</source>
<target name="ubQ" type="QUEUE" value="XPDinteg_PremisesConfigQueue"></target>
</flow>
</pipe>
…
</pipes>
Application update process
Since the Expeditor integrator components are compliant to the OSGi/Equinox/Eclipse standard, they can be simply updated by using the standard OSGi bundle update mechanisms or Eclipse Plug-in Installation Manager. OSGi bundles and Eclipse Plug-ins can be remotely installed, started, stopped and updated without requiring the whole platform to be re-started. An OSGi bundle and service dependency resolution is automatically used to minimize the possibility of installation and deployment failures. Single application components might so be remotely updated without effecting the running application.
The IBM Lotus Expeditor Server offers remote OSGi bundle and Eclipse Plug-in management as well as configuration management. It is the recommended infrastructure component for large deployments in order to keep the operational effort minimal.
The Expeditor integrator offers different update methods:
- Complete reinstall
This method is equal to the initial installation procedure that is described earlier in this document (see chapter 2.3 Installation of Expeditor Integrator). All files in the old installation location (<XPDINTEG_HOME> directory) are removed and replaced with a new Expeditor integrator package (all application files and configuration). This also involves the deletion of the local queues that might contain messages which belong to a transaction.
Please, use this method with great care and when no transactions are pending.
- Eclipse plug-in (component) update
This is the state-of-the-art method to update Eclipse RCP based applications. The Eclipse Rich Client Platform services ensure that only plug-ins (components/services) with resolved dependencies are finally started. They also allow application components updates without requiring a re-start, re-configuration of the platform / application nor the deletion of local queues (apart from the case when micro broker related services and components are effected; please refer to the configuration section 3 in this document for details).
Example: The file footer Activity BuildPriceUpdateFileFooterActivity in a FileTransfer ACS flow needs to be modified because the file footer creation algorithm was changed. This can be dynamically done by remotely updating the com.ibm.rcp.integrator.acsactivities application component (bundle) with a new version.
- Installation of new components to extend the application (bundles)
This is an extension to the second option. The Expeditor integrator can be simply extended with new ACS flows by providing new flow definition files through the FileTransfer methods (see chapter 4.6.1 Inbound Resource Mapper) and adding new ACS Activities by installing the components (plug-ins) that implement them using the remote Eclipse plug-in or OSGi bundle installation. This gives the Expeditor integrator powerful extension options and allows for remote adjustment of flows and use case implementations.
Expeditor integrator custom deployment options
Custom Deployment Example Scenario
The Expeditor integrator provides an example scenario for custom deployment (see Figure 13). This example allows for deploying the Expeditor integrator runtime to many machines with base configuration values. During the very first startup (boot strap), the Expeditor integrator runtime contacts the messaging back-end in order to retrieve a unique customized configuration. Every Expeditor integrator runtime is identified by its Boot Strap ID. The Boot Strap ID is based on a unique ID locally available on the remote server on which the Expeditor integrator is installed (e.g. the MAC or IP address). This unique ID can be retrieved by the Expeditor integrator runtime. Based on this ID, the business back-end is able to identify the remote Expeditor integrator instance and select the corresponding configuration file (which must be available at the back-end). Therefore, the business back-end requires a directory of any kind to do the mapping between the Boot Strap ID and the real LocationId and the corresponding XPDinteg.xml configuration file.
The application which does this assignment is not part of the Expeditor integrator product. However, the Expeditor integrator tools contain a Custom Deployment Tool which can be used for testing this scenario. For details please refer to chapter 5.5.2 Custom Deployment Tool.

Figure 13: Steps processed while running the Custom Deployment Scenario
The base configuration file has the same structure as the XPDinteg.xml configuration file, but only contains configuration data required for the deployment process. It contains a common section containing information about the type of ID which should be used as Boot Strap ID (see Listing 43).
Listing 43: common section of the base config file
…
<common>
<id><BootStrapId></id>
<boot-strap value="ON">
<bootstrap-id-type>MACAddress</bootstrap-id-type>
</boot-strap>
</common>…
The following configuration properties are available for the <common> section of the boot strap configuration file.
Table 45: Properties for the common section of the boot strap configuration file
Property
|
Explanation
|
<id>
|
The Expeditor integrator application uses the Boot Strap ID as the location-id
Predefined value: “<BootStrapId>” (not to be changed)
|
<boot-strap value=
|
“ON”
Indicates whether the application should run the bootstrap/deployment scenario
Predefined values: “ON” (not to be changed)
|
<bootstrap-id-type>
|
Describes which type of ID should be used for the bootstrap/deployment scenario.
possible values: MACAddress | IPAddress | HostName | CanonicalHostName | UniqueIdFile
|
<param name =idFileLocation
value=
|
“ path_to_my_bootstrap_id”
String contains path to the ID file which contains the unique boot strap ID.
|
The bootstrap-id-type IdFile is describing an arbitrary file containing a unique ID which is already available on the remote server (where the Expeditor integrator runtime is deployed). For example, this ID file was created placed by other system management software (e.g. Tivoli). If UniqueIdFile is used as Boot Strap ID, an additional parameter is required – the path to the ID file (see Listing 44).
Listing 44: Custom Deployment configuration example: Boot Strap ID
…
<common>
<id><BootStrapId></id>
<boot-strap value="ON">
<bootstrap-id-type>UniqueIdFile</bootstrap-id-type>
<params>
<param name=”idFileLocation” value=”C:\myUnique.id”/>
<params>
</boot-strap>
</common>
Furthermore, the base boot strap configuration contains configuration data for:
- Transaction Service
- Messaging Service
- Application Control Service (ACS)
- Resource Mapper
- Custom Config Service
- (Configuration details for these services can be found in section 3.)
The <messaging-service> section in the XPDinteg.xml contains only the configuration data for the Connection Factory to the business backbone. This includes the definition for the 2 required configuration queues (for retrieving the customized configuration files), the SyncQ and DeadletterQ required by MQ. In addition, it contains a JMS Selector ID to explicitly filter for the Boot Strap ID of the local Expeditor integrator runtime so that the unique configuration for this runtime is selected and received from the configuration queue at business backbone.
Listing 45: JMS Selector configuration
…
<flow name="inQFlow" direction="INBOUND">
<source name="mqQ" type="JNDI">
<value>jms/MQ_ConfigQOut</value>
</source>
<target name="ubQ" type="QUEUE" value="XPDinteg_ConfigQIn"></target>
<jms-selector>BootStrapId = '<BootStrapId>'</jms-selector>
</flow>
The following section for the Custom Config Service in the XPDinteg.xml file is only needed for this deployment scenario.
Listing 46: Custom config service configuration required for the base configuration
…
<custom-config-service>
<deployment-mode value="CUSTOM">
<custom-deployment>
<jndiConnectionFactoryKey>jms/XPDinteg_ConnectionFactory</jndiConnectionFactoryKey>
<targetQJNDI>jms/XPDinteg_ConfigQOut</targetQJNDI>
</custom-deployment>
</deployment-mode>
</custom-config-service>
…
These properties are required to specify the deployment-mode (only take effect when boot-strap property in the common section is set to “ON”).
This section for the Application control service configures the required activities:
Listing 47: Application Control Service section for the custom deployment scenario
<!--
********************************************************************
* ACS - Application CONTROL SERVICE
* Flow and Activity configuration
******************************************************************** -->
<application-control-service>
<definition-settings>
<directory>flowdefs</directory>
<poll-interval>120000</poll-interval>
<extension>flow</extension>
<retryInterval>30000</retryInterval>
</definition-settings>
<permissions>
<multiple-flows-per-topic>false</multiple-flows-per-topic>
</permissions>
<activity-configurations>
<configuration activity="XPDINTEG_VALIDATE_TRANSFORM_ACTIVITY">
<param name="XSDLocation" value="config\system\XPDinteg.xsd"/>
<param name="XSLTLocation" value="config\system\XPDinteg.xsl"/>
<param name="OutputXMLLocation" value="config\system\XPDintegConfig.xml"/>
</configuration>
<configuration activity="XPDINTEG_PLATFORM_RESTART">
<param name="EnableScriptExecution" value="TRUE"/>
</configuration>
</activity-configurations>
</application-control-service>
The following must be considered for the configuration in the XPDinteg.xml which is provided by the business backbone:
- <boot-strap> section is removed from the <common> section
- The new configuration file which is sent needs to contain
<messaging-service>
<microbroker>
<core>
<clean-start>true</clean-start>
for the Messaging Service. This is required because the micro broker needs to be reset after changed queue definitions.
Example for a rollout scenario for a production environment
The following chapter describes an example of a scenario that can be used in production environments to deploy Lotus Expeditor integrator in the field (several hundred locations) and supply the installations with a specific configuration to make them operational. It is an example that should be adopted according the customers environment and needs. The example refers to an installation on a Linux system.
- Create a reference image
- Install the product on a reference machine (<XPDintegHome> = /opt/ibm/lotus/integrator)
- Configure the reference installation with a startup configuration containing
- All required flows in the <XPDintegHome>/flowdefs
- A XPDinteg.xml
- without a connection to a messaging backend
- only one resource adapater monitoring for the basic configuration file (default ConfigurationUpdate resource monitor)
- A basic configuration file in <XPDintegHome>/config/basic/XPDinteg_WILDCARD.xml
- It contains a placeholder like “LOCATIONWILDCARD” for location specific configuration parts
- It contains a connection to the messaging backend, but only global queues, no location specific queues
- Listens on a “ConfigQIn” via a MessageSelector for its specific configuration (e.g. JMS_Property LocationId = ’Filialnummer’)
- No resource adapters for data collection and data distribution are configured
- adopted daemon script “xpdinteg”
- Create an archive of the reference image (tar cpvf - lotus | gzip > XPDintegImage.tar.gz)
- Distribute the reference image via the customers software distribution mechanism
- Reference image is copied to the target machine
- Reference image is extracted in the directory /opt/ibm
- Service daemon script “xpdinteg” is deployed to /etc/init.d
- Custom deployment scripts start
- These are custom scripts that must be created and may depend on the customers software distribution mechanism
- Custom scripts update the placeholder in the basic configugration file <XPDintegHome>/config/basic/XPDinteg_ WILDCARD.xml "LOCATIONWILDCARD" will be replaced with a location property that is determined by the script, e.g. the hostname or a StoreID that is written in an ID file, that already exists in the customers environment for identification purposes of machines that are installed in the remote locations.
- Custom scripts copy the updated basic configuration to <XPDintegHome>/config/new/XPDinteg.xml to be picked up by the ConfigurationUpdateFlow
- Custom scripts create a file <XPDintegHome>/BootStrapInfo.txt. All information required by the backend systems is added to this file, e.g. Hostname, Operating system, LocationID, CountryCode etc.)
- First start-up of Lotus Expditor integrator using the daemon
- The default configuration update flow detects the XPDinteg.xml in <XPDintegHome>/config/new/XPDinteg.xml and deploys the new configuration
- A restart incl. a reset is triggered
- Second start-up
- The product is configured with the basic configuration now
- A Resource monitor picks up the <XPDintegHome>/BootStrapInfo.txt file and sends it to the messaging backend via a dedicated queue
- Backend system receives the message containing the file and is having now all required information to:
- Create location specific queues on the messaging backend systems
- Create a custom XPDinteg.xml for this location with all required adapters, resource monitors, queues, backend connections etc.
- Messaging backend sends the custom XPDinteg.xml to the queue ConfigQOut on messaging backend
- New Configuration file is received by the product on the queue ConfigQIn and applies the new location specific configuration
- A restart including a reset is triggered
- Third start-up
- The product is now fully operational

Figure 14: Example for a Deployment scenario in a production environment
Custom Deployment Tool
The Custom Deployment Tool can be used to simulate the backend functionality for the custom deployment scenario (described in chapter 5.5.1 Custom Deployment Example Scenario). Once started, the Custom Deployment Tool takes the HELLO messages sent by the Expeditor integrator from the ConfigInQ and creates response messages containing the corresponding configuration (file) and puts it on the ConfigOutQ.
Please, find the Custom Deployment Tool under <XPDNTEG_HOME>/CustomDeploymentTool.zip
Follow these steps to run the Custom Deployment Tool:
- Unzip the CustomDeploymentTool.zip file under the
<XPDINTEG_HOME>/tools/CustomDeploymentTool
- Edit the mq.properties file and provide the following information
- QM=<QueueManager>
- QM_HOST=<Hostname-where-the-Queuemanager-is-running>
- QM_PORT=<Portnumber>
- QM_SERVER_CONNECTION=<ChannelName>
- receivingQ=<Name-of-the-ConfigInQ> Default: ConfigQIn
- sendingQ=<Name-of-the-ConfigOutQ> Default: ConfigQOut
- deadLetterQ=<Name-of-the-DeadletterQ>
- Edit the bootstrap.properties and provide the mapping between the Boot Strap ID and the location of the unique configuration file (XPDinteg.xml) for the Expeditor integrator runtime with this specific Boot Strap ID:
- If Boot Strap ID is the MACAddress:
00-0C-29-F9-92-FD=XPDintegXML/XPDinteg-100.xml
- If Boot Strap ID is the IPAdress:
10.0.1.12=XPDintegXML/XPDinteg-101.xml
- If Boot Strap ID is the HostName:
server1.abc.de=XPDintegXML/XPDinteg-102.xml
- If Boot Strap ID is the UniqueFileId:
<yourUniqueId>=XPDintegXML/XPDinteg-103.xml
- Provide all required configuration files (all files mentioned in the bootstrap.properties file), The default directory for these files is: <XDPINTEG_HOME>/tools/customdeploymenttool/XPDintegXML
- Open a console window and change to the directory of the custom deployment tool (<XPDINTEG_HOME>/tools/CustomDeploymentTool).
- Start the tool by running the CustomDeployment.bat
- To close the tool, please press Enter.
Note: Please, make sure that the CustomDeployment.bat points to an existing JDK (by default it points to the JDK provided with the Expeditor integrator).
Expeditor integrator Maintenance Mode
The Expeditor integrator supports back-end maintenance operations. If the messaging back-end undergoes planned and controlled maintenance due to any reason (e.g. yearly maintenance window) the remote Expeditor integrator runtime can be put into “Maintenance Mode”. In Maintenance Mode, the Expeditor integrator runtime can be prevented from sending messages to the monitoring back-end (e.g. about the messaging infrastructure not being available due to the maintenance). This avoids the monitoring system being flooded with error messages during planned maintenance.
It can be configured which messages should be forwarded during Maintenance Mode.
The Maintenance Mode is switched on/off through changes in the Expeditor integrator configuration or through specific control messages. Events can still be locally persisted in the maintenance mode log file.
Please, refer to chapter 6.6 Maintenance Mode for more details.
Expeditor integrator Local Maintenance Mode (TECHNOLOGY PREVIEW CODE)
The Expeditor integrator supports a Local Maintenance Mode to allow a save upgrade procedure of the product itself. Therefore, when the Local Maintenance Mode is entered, Expeditor integrator processes all open work items such as messages in the queues, assures that the local messagestore is empty and shuts down afterwards. After finishing this procedure, the message store does not contain valuable information any more and the product can be updgraded or reseted without data loss.
Entering the Local Maintenance Mode can be triggered by a Local Filesystem File or a Control Message with the MessagePurpose “StartLocalMaintenance”.
Please refer to chapter Local Maintenance Flow for more details.
Log Messages
Generally, Lotus Expeditor integrator can display log messages in the OSGi Console, if Expeditor integrator was started in console mode (see chapter 5 Expeditor integrator operation). These console log messages are switched OFF by DEFAULT.
They can be switched back ON by editing the following line in
<XPDINTEG_HOME>/rcp/eclipse/features/com.ibm.rcp.integrator.feature_<version>.<build>/handler.properties
-Dcom.ibm.rcp.integrator.showflowstatus=true
Note: Changes to the handler.properties file require resetting and re-starting the Expeditor integrator platform.
Log messages can also be received by the back-end. There are 3 options available for retrieving log entries through messaging:
Local log files are also created and could be retrieved by FileRequest messages (see Table 50 in chapter 9.4.1 Where to look first in case of Problems (Log Files) with available log files).
Level of Log Messages
Logging information is provided by each application component through the OSGi Log Service. These log entries are temporarily stored in the
<XPDINTEG_HOME>/workspace/log folder. These log entries fire log events that are retrieved by the Custom Log Service and the iTMS (see chapter 5.7.2 micro broker and micro broker bridge Logging). The Custom Log Service and the iTMS can be configured to forward these events to either as defined LogQ in the back-end Message Broker or to a Tivoli Enterprise back-end (Console.
The log levels can be configured in the XPDinteg.xml (see chapter 4.7 Application Control Service configuration).
Micro broker and micro broker bridge logging
The Lotus Expeditor micro broker and the micro broker bridge create their own log files. They are located in <XPDINTEG_HOME>/persistent/microbroker/XPDinteg_broker and contain information about the broker status, connection to the back-end and message handling.
The size of the log file can be set with MicrobrokerLogSize in XPDinteg.xml.
Transaction Service Log
The Expeditor integrator transaction log service creates log files in <XPDINTEG_HOME>/persistent/txlogdir/partnerlog and <XPDINTEG_HOME>/persistent/txlogdir/tranlog where the status of the transactions is logged. The transaction log directory can be configured in the XPDinteg.xml file (TransactionLogDirectory).
Tivoli Monitoring
Tivoli monitoring is provided through the Expeditor integrator Tivoli Monitor (SATM) service. This service uses the EIF (Event Invocation Framework) and forwards Log events to a Tivoli Enterprise Console (TEC) in the back-end directly or through a locally installed Tivoli Endpoint. It can also be configured which log events are forwarded.
The forwarded event classes are:
- XPDINTEG_BUNDLEEVENT
- XPDINTEG_LOGEVENT
The TEC log and trace files are stored in
- <XPDINTEG_HOME>/persistent/tec/eif.log and
- <XPDINTEG_HOME>/persistent/tec/eif.trc
The TEC libraries do not provide options to limit the trace and log file size. The Expeditor integrator v1.0 passes the log file names as parameters on to the used TEC libraries. Currently, there is no way to limit the size of these two files (even from XPDinteg).
It is recommended to turn the logging and tracing only on in defined environments by setting TecLogLevel=ALL and TecTraceLevel=ALL (in XPDinteg.xml) and OFF again under production conditions
Please, refer to chapter 4.7 Application Control Service configuration for configuration details.
Performance Parameter
The Expeditor integrator was developed to meet the following requirements:
- not exceed 512 MB dynamic memory (RAM) during runtime
- not consist of more then 2000 files and must not be larger then 300 MB on disk (footprint)
- be able to process 80000 price update messages within 2 hours (special case of BUC100: initial price upload)
Please, check chapter 5.11 Expeditor Integrator Tuning for tuning recommendations.
Crash of Expeditor integrator
In the case that the Expeditor integrator keeps crashing and does not restart in a defined manner, the Expeditor integrator can be reset. The reason for the crash might be a mis-configuration. Please, consider to replace the XPDinteg.xml file with a tested version.
Please try the following:
- Delete the <XPDINTEG_HOME>\persistent and the <XPDINTEG_HOME>\workspace folder
- Run the XPDintegReset.bat in <XPDINTEG_HOME>\resetscript
- Start the Expeditor integrator by either executing the XPDintegStart.bat or restarting the corresponding Windows Service
Important: If the \persistent folder is deleted, all messages that are currently sitting in local queues are deleted as well. Please, be very cautious with this operation!
If the problem still exists, please consider contacting IBM Support. Please, run the IBM Support Assistant and provide the created support information (see chapter 6.8 IBM Support Assistant).
Please, refer to chapter 5.1 Start / Stop Expeditor integrator for the start up procedure.
Backup and Restore
The Expeditor integrator is located in the <XPDINTEG_HOME> directory (see section 3).
Please, back-up the following folders that store configuration and log information:
- config
- flowdefs
- workspace\log
In case of system and hard disk crash on the remote server, the Expeditor integrator could be re-installed and the backed up folders could be restored to their original location.
Note about the message persistence: Since the \persistent folder contains the local Expeditor integrator queues, the queues in the backup folder will contain all those messages that were in the queues during the creation of the backup. If a potential crash happens a longer time after the back-up, all messages (saved during the back-up process) will have been processed already. If the backed up messages are restored in the \persistent folder, these messages will be re-processed. This will cause wrong business behavior of the application (e.g. old price updates will be applied after a restore). Therefore, it is highly recommended to delete the /persistent folder after a restore operation and before the application restart.
It is also recommended to delete the /workspace content and re-run the XPDintegReset.bat (see chapter 5.9 Crash of Expeditor integrator).
Please, refer to chapter 2.5 Expeditor integrator file and directory structure for the current footprint of the Expeditor integrator.
Expeditor integrator Tuning
This chapter contains some recommendations to address environment specific behavior.
Securing Operations
Expeditor integrator has additional security barriers on use case level:
Allowing Script Execution
Option 1 provides the opportunity to globally enable/disable all Activities which depend on the execution of local scripts. The parameter EnableScriptExecution can be set to TRUE or FALSE for the following ACS Activities:
- XPDINTEG_FILE_EXECUTE
- XPDINTEG_EXECUTE_LOCAL_SCRIPT
- XPDINTEG_PLATFORM_RESTART
Listing 48: Example for enabling / disabling script execution globally
<application-control-service>
<activity-configurations>
<configuration activity="XPDINTEG_FILE_EXECUTE">
<param name="EnableScriptExecution" value="TRUE"/>
</configuration>
<configuration activity="XPDINTEG_EXECUTE_LOCAL_SCRIPT">
<param name="EnableScriptExecution" value="TRUE"/>
</configuration> <configuration activity="XPDINTEG_PLATFORM_RESTART">
<param name="EnableScriptExecution" value="TRUE"/>
</configuration>
...
Listing 48 shows the enabling / disabling of the affected Activities on global level. These global settings can be overwritten in each flow. The Activity in the flow definition file would explicitely set the EnableScriptExecution parameter again (see Listing 49).
Listing 49: Example for overwriting global EnableScriptExecution setting in ACS Flow definition file
…
<XPDintegActivity
Name="PlatformRestart_PlatformRestart"
ActivityName="XPDINTEG_PLATFORM_RESTART"
LocalScriptFile="services/XPDintegRestart.bat"
EnableScriptExecution="TRUE"
Command="restart"
Param="console"
/>
…
Please, refer to
Ref_2 for more details about the ACS Flow configuration.
Securing ACS Flows
Expeditor integrator provides a specific Application Control Service (ACS) Activity called CheckJMSHeaderProperty which allows for comparing of a given JMS Custom Header property with the locally provided value.
If the comparison is
a) TRUE: the input object will be passed on transparently to the next Activity in the Flow
b) FALSE: the ACS flow and the transaction will fail and the provided <MessageFailureAction> will be executed.
Therefore, the CheckJMSHeaderProperty Activity can be used to secure given flows, for example the ConfigUpdate and/or the PlatformRestart control flows (see Figure 15). The message which triggers these secured flows must provide user name and password in the Credentials JMS Custom Header property. These will then be compared with the locally provided credentials in the CheckJMSHeaderProperty Activity in the Flow. It is recommended to use excrypted passwords.
Figure 15: Securing Application Control Service Flows
Please, refer to
Ref_2 for more details about the ACS Flow configuration.
Slow and Unreliable Network Connections
The micro broker and micro broker bridge might loose the connection to the back-end Message Broker often due to slow networks. The following message in the Expeditor integrator console window is an indication for this situation:
Listing 50: Console output indicating slow network connectivity
<osgi> 2008/01/08 15:25:45.875 SEVERE FMBB3030 bridge JMS connection [Ljava.lang.String;@7ebc7ebc
encountered a JMS exception, the connection will be closed andvattempts made to restart it, reason:
javax.jms.JMSException:
MQJMS2002: failed to get message from MQ queue ::class.method=unknown ::thread=
Thread-3 ::loggername=com.ibm.micro.utils
2008.01.08 15:25:47 MQJMS1023E rollback failed
2008/01/08 15:25:47.500 SEVERE FMBB3030 bridge JMS connection [Ljava.lang.String;@7ebc7ebc encountered a
JMS exception, the connection will be closed and attempts made to restart it, reason: javax.jms.JMSException:
MQJMS2002: failed to get message from MQ queue ::class.method=unknown ::thread=Thread-3 ::loggername=
com.ibm.micro.utils 2008.01.08 15:25:50 MQJMS1023E
rollback failed
Please, adjust the socket timeout value under
<XPDINTEG_HOME>\rcp\eclipse\plugins\com.ibm.rcp.base_<version_build_no>\config\pbuilder/
rcpinstall.properties
by changing the value of -Dcom.ibm.mq.tuning.socketGrainTimeout to 30000
-Dcom.ibm.mq.tuning.socketGrainTimeout=30000
Note: Furthermore, this MQ Client Idle timeout set in the Expeditor integrator micro broker bridge must correlate with the MQ Client Idle timeout set on the WebSphere MQ Server (Message Broker). Lotus Expeditor integrator will always wait for this time before attempting a reconnect to MQ queue manager. As a result of this, the server always cleans up the sockets which are left open and rolls back any uncommitted messages before Expeditor integrator connects back.
The MQ Client Idle timeout can be set on the WebSphere MQ Server (Message Broker) with the following command :
amqmdain reg <qm_name> -c add -s Channels -v ClientIdle=<val_in_secs>
Micro broker client connections:
Connection time outs between IBM micro broker clients and Expeditor integrator could cause connections to hang for an unexpected long time. In order to avoid this, the optional messaging service parameter
<keepalive-duration> can be set. It defines the data traffice idle time in msec after which the Expeditor integrator micro broker will reset the idle micro broker client connections.
IBM WebSphere MQ Channel Heartbeat Interval (HBINT):
Lotus Expeditor integrator provides an OSGi console command checkmsgserverstatus for displaying the status of connection to the back-end server. If Expeditor integrator loses the connectivity to the back-end server due to physical network problems, it may take a long time (approximately 6-8 minutes or more) to realize the disconnection. Within this time, the OSGi console command checkmsgserverstatus will show integrator as still being connected to the back-end server. When the physical network connection is available again, integrator is able to realize the restoration of connection to back-end server within one retry interval (default is 60 seconds).
The issue may be seen due to the insufficient default Heartbeat Interval (HBINT) parameter setting on the channel of the MQ back-end server. The HBINT is the time out interval after which an exception listener is invoked in the JMS classes for MQ when connectivity problems between client and server occur for the used server connection channel. The default value of the HBINT is 300 seconds (5 minutes).
The WebSphere MQ classes for JMS rely on the underlying Java Runtime Environment to throw a SocketException if a TCP/IP connection to the queue manager is broken. The WebSphere MQ classes for JMS will use the value of the HBINT property to set the time-out on the socket object that represents the TCP/IP connection. This means that, if an application connects to a queue manager using the CLIENT transport, the higher the value of HBINT, the longer it will take for the exception listener to be invoked for informing the application that the TCP/IP connection is broken.
If there is a requirement to detect connection failures sooner, the value of the HBINT property should be lowered. Note that if the HBINT property is set too low, there will be an increase in network traffic. CPU usage will also increase, as there would be more heart beat flows to be processed. If the TCP keepalive parameter is used in the network, please make sure that it is set to a value higher than that of HBINT.
The following steps are required for setting the HBINT:
1. Open WebSphere MQ Explorer and point it to the MQ backend server (queue manager)
2. Under the Queue Manager | Channels
3. Select the respective channel | Right click and select Properties
4. Set the HBINT under the extended tab | HeartBeat Interval
FTP Connections:
Unreliable connections from the FTP Resource Adapter to target FTP servers can also cause time out problems. The optional FTP connection parameter DataTimeOut was introduced to avoid the FTP connection thread to hang if no clean disconnecting from the FTP server was possible, e.g. during unexpected shutdown (see chapter 4.4.2 FTP Resource Adapter). Furthermore, it is recommended for unreliable FTP network environments to lower the connection time out parameter on the FTP server accordingly.
Running the Expeditor integrator with limited or increased memory
If the Expeditor integrator server machine has limited memory (as this is the case for many embedded environments), it is recommended to update the Virtual Machine heap size argument. This restricts the Virtual Machine to allocate only defined maximum amount of RAM during runtime (Java Heapsize).
Locate the <XPDINTEG_HOME>\rcp\eclipse\plugins\com.ibm.rcp.j2se.win32.x86_<version>\jvm.properties and set
vmarg.Xmx to -Xmx256m
This limits the Expeditor integrator’s heap size at runtime to a maximum of 256MB.
This setting can also be used to increase the default memory heap size allocated by the virtual machine. It is recommended to check the maximum value which can be allocated in your environment by simply starting the virtual machine from the command line. Go to:
cd <XPDINTEG_HOME>\rcp\eclipse\plugins\com.ibm.rcp.j2se.<os>.<version>\jre\bin
and run
java -Xmx2048m -version
This command returns the used Java version, if the requested memory heap size (of 2048 MB) can be allocated. Otherwise, an error will be displayed stating that the instantiation of the heap memory failed.
(See memory limitations in chapter Memory usage and queue size)
Reduce Application Load due to Polling
Due to the nature of the polling mechanism of certain Resource Adapters (FTP, SSH and LocalFileSystem Adapter), the Expeditor integrator load can be further reduced by defining larger polling intervals. The polling intervals for given resources should be evaluated with the business carefully (e.g. polling for the existence of a given file on the 4690 PoS Controller or the local file system).
It may not be required to poll for transaction log files every minute when they only become available once a day! A polling interval of 15 minutes would be sufficient.
Please, invest enough time for discussing these values with the business users.
The same applies for incoming messages, because polling queues also consumes local resources. How many messages are expected from the back-end Message Broker and which reaction time is sufficient?
Chapter 4.4 Resource Monitor and Resource Adapter Configuration shows where and how the polling intervals can be configured.
Location of JVM Shared Class Cache File
The C240D2A32P_xpdplat_.jvm_G04 file is the JVM shared class cache file. It is used for performance caching of class files during runtime.
The default location for this file is
<XPDINTEG_HOME>/workspace/.config/org.eclipse.osgi/C240D2A32P_xpdplat_.jvm_G04 and its size is 64MB.
The location and the size of this file can be set using the following two properties in the jvm.properties of the Expeditor integrator JRE (default values listed below):
jvm.shareclasses.loc=${rcp.data}/.config/org.eclipse.osgi
vmarg.Dscmx=-Xscmx64m
These properties can be overridden in the rcpinstall.properties present in the
<XPDINTEG_HOME>/rcp/eclipse/plugins/com.ibm.rcp.base_<version> plug-in.
In cases where customers have restriction on the size of this file, these two properties can be modified in the rcpinstall.properties file.
Start Expeditor integrator in Linux console 'Screen mode'
If Expeditor integrator is started in a Linux console rather than as Linux daemon the life time of the Expeditor integrator process is defined by the life time of its parent console.
If the parent console window is closed the Expeditor integrator process will be automatically ended. This is a limitation for production like environments to which administrators have only remote access (e.g. through SSH consoles).
The Linux screen command allows pushing a consol window to the background ('detach') and reconnecting to it again ('attach'). The following command example explains the simple use:
- Open a (remote) console window, e.g. with
- ssh 192.168.40.120 –l my_ssh_user
- In this session, start a second console with the Screen command by entering:
- screen
- Switch to root user into the created background console and start Expeditor integrator in there (OSGi console and logging data is visible):
- sudo su
cd /opt/ibm/lotus/Integrator
./XPDintegStart.sh
- Detach this console (and move it to background) by entering these keyboard keys:
- 'Ctrl – a' and then press 'd'
- Exit your (remote) console.
- Now, any other remote SSH login can re-attach to the created Linux console in which the OSGi console of Expeditor integrator running.
- Enter the following command to re-attach to the previously created console with Expeditor integrator:
- screen –x
- If more than one screen session is displayed, the one with the OSGi console needs to be selected with:
- screen –x pidof_screen_session
Remote access to OSGi Console when running as Service
When Expeditor integrator is started as Service in non-console mode (or when it is started the first time after a platform Reset under Linux), the OSGi console is hidden. Log messages are not visible and certain Expeditor integrator console commands for retrieving status information are not available. In this case, the Expeditor integrator UI can be used for retrieving state information (see chapter Monitoring tool page). If this is also not possible, telnet access to the hidden OSGi console can be configured.
Follow these steps to enable telnet access to the OSGi console:
· Edit
rcpinstall.properties and add this line:
-Dosgi.console=
(e.g. -Dosgi.console=8775)
· If
rcpinstall.properties in folder
/workspace/.config is edited, ony a platform restart is required for taking effect. But, a later platform reset will delete this setting again.
· If rcpinstall.properties in folder
/rcp/eclipse/plugins/com.ibm.rcp.base_ is used, the setting will be permanent, but a platform reset is required for applying it.
With this console access being configured, a heap dump can be easily triggered without requiring Expeditor integrator being restarted with a visible console (see creating a heap dump in chapter 10.5).
Note: This remote access is only possible when Expeditor integrator was started up with a hidden console window. If a console window already exists, the telnet connection will fail.